<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // function myFilter(arr, fn) {
  //   // var arr = [2,8,4,6,5,7,9,3,1];
  //   // var fn = function(item,index,array){ // 形式参数(对应接收函数在调用时实际传入的值)
  //   //     console.log(item,index,array);
  //   // }

  //   var brr = [];
  //   for (var i = 0; i < arr.length; i++) {
  //     var item = arr[i];  //循环的当前元素
  //     var index = i;    // 循环的当前下标
  //     var array = arr;  //原数组

  //     // // 实际参数 (函数调用时实际传入的值)
  //     var result = fn(item, index, array);   // true || false
  //     if (Boolean(result)) { // 如果结果成立 
  //       brr.push(item);
  //     }
  //   }
  //   return brr;
  // }

  // var list = [9,1,7,3,4,6,8,2,5];
  // console.log("原数组",list);
  // var res =  myFilter([9,1,7,3,4,6,8,2,5],function(item,index){
  //     console.log(item);
  //     // return item % 2 == 0;  // true false
  //     return item % 2;  // 1  0  如果返回值不是条件表达式 => 会先转化为布尔值 在判断是否成立  
  // })
  // console.log(res);



  // function mySome(arr, fn) {  //是否存在满足条件的元素
  //   // var arr = [2,8,4,6,5,7,9,3,1];
  //   // var fn = function(item,index,array){ // 形式参数(对应接收函数在调用时实际传入的值)
  //   //     console.log(item,index,array);
  //   // }

  //   var flag = false; //  假设不存在
  //   for (var i = 0; i < arr.length; i++) {
  //     var item = arr[i];  //循环的当前元素
  //     var index = i;    // 循环的当前下标
  //     var array = arr;  //原数组

  //     // // 实际参数 (函数调用时实际传入的值)
  //     var result = fn(item, index, array);   // true || false
  //     if (Boolean(result)) { //如果存在满足条件元素
  //       flag = true;
  //       break;
  //     }
  //   }
  //   return flag;
  // }

  // var list = [9, 1, 7, 3, 4, 6, 8, 2, 5];
  // console.log("原数组", list);
  // var res = mySome([9, 1, 7, 3, 4, 6, 8, 2, 5], function (item, index) {
  //   console.log(item);
  //   // return item % 2 == 0;  //  如果返回值不是条件表达式 => 会先转化为布尔值 在判断是否成立  
  //   // return item % 2 == 0 && item % 7 == 0;

  // })
  // console.log(res);


  function myEvery(arr, fn) {  //数组中的元素是否全都满足某个条件
    // var arr = [2,8,4,6,5,7,9,3,1];
    // var fn = function(item,index,array){ // 形式参数(对应接收函数在调用时实际传入的值)
    //     console.log(item,index,array);
    // }

    var flag = true; //  假设都满足
    for (var i = 0; i < arr.length; i++) {
      var item = arr[i];  //循环的当前元素
      var index = i;    // 循环的当前下标
      var array = arr;  //原数组

      // // 实际参数 (函数调用时实际传入的值)
      var result = fn(item, index, array);   // true || false

      // Boolean(result)==false   等价于 => !Boolean(result)
      if (Boolean(result) == false) { //如果存在不满足条件元素
        flag = false;
        break;
      }
    }
    return flag;
  }

  var list = [9, 1, 7, 3, 4, 6, 8, 2, 5];
  console.log("原数组", list);
  var res = myEvery(list, function (item, index) {
    console.log(item);
    // return item >= 1;  //  如果返回值不是条件表达式 => 会先转化为布尔值 在判断是否成立  
    // return item % 2 == 0 && item % 3 == 0;

  })
  console.log(res);


</script>

</html>